home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / misc_pto / mwpetz07 / btnlook.c < prev    next >
C/C++ Source or Header  |  1991-06-02  |  5KB  |  165 lines

  1. /* BTNLOOK.C -- Button Look Program */
  2.  
  3. #ifdef MEWEL
  4. #include <window.h>
  5. #undef NULL
  6. #define NULL 0
  7. #define BS_PUSHBOX  BS_PUSHBUTTON
  8. #else
  9. #include <windows.h>
  10. #endif
  11. #include <stdio.h>
  12.  
  13. long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG) ;
  14.  
  15. int PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  16.      HANDLE   hInstance, hPrevInstance ;
  17.      LPSTR    lpszCmdLine ;
  18.      int      nCmdShow ;
  19.      {
  20.      WNDCLASS wndclass ;
  21.      HWND     hWnd ;
  22.      MSG      msg ;
  23.      static   char szAppName [] = "BtnLook" ;
  24.  
  25.      if (!hPrevInstance) 
  26.           {
  27.           wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  28.           wndclass.lpfnWndProc   = WndProc ;
  29.           wndclass.cbClsExtra    = 0 ;
  30.           wndclass.cbWndExtra    = 0 ;
  31.           wndclass.hInstance     = hInstance ;
  32.           wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
  33.           wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  34.           wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
  35.           wndclass.lpszMenuName  = NULL ;
  36.           wndclass.lpszClassName = szAppName ;
  37.  
  38.           if (!RegisterClass (&wndclass))
  39.                return FALSE ;
  40.           }
  41.  
  42.      hWnd = CreateWindow (szAppName, "Button Look",
  43.                          WS_OVERLAPPEDWINDOW,
  44.                          CW_USEDEFAULT, 0,
  45.                          CW_USEDEFAULT, 0,
  46.                          NULL, NULL, hInstance, NULL) ;
  47.  
  48.      ShowWindow (hWnd, nCmdShow) ;
  49.      UpdateWindow (hWnd) ;
  50.  
  51.      while (GetMessage (&msg, NULL, 0, 0))
  52.           {
  53.           TranslateMessage (&msg) ;
  54.           DispatchMessage (&msg) ;
  55.           }
  56.      return msg.wParam ;
  57.      }
  58.  
  59. struct
  60.      {
  61.      long style ;
  62.      char *text ;
  63.      }
  64.      button [] =
  65.      {
  66.      BS_PUSHBUTTON,      "PUSHBUTTON",
  67.      BS_DEFPUSHBUTTON,   "DEFPUSHBUTTON",
  68.      BS_CHECKBOX,        "CHECKBOX", 
  69.      BS_AUTOCHECKBOX,    "AUTOCHECKBOX",
  70.      BS_RADIOBUTTON,     "RADIOBUTTON",
  71.      BS_3STATE,          "3STATE",
  72.      BS_AUTO3STATE,      "AUTO3STATE",
  73.      BS_GROUPBOX,        "GROUPBOX",
  74.      BS_USERBUTTON,      "USERBUTTON",
  75.      BS_AUTORADIOBUTTON, "AUTORADIO",
  76.      BS_PUSHBOX,         "PUSHBOX"
  77.      } ;
  78.  
  79. #define NUM (sizeof button / sizeof button [0])
  80.  
  81. long FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  82.      HWND         hWnd ;
  83.      unsigned     iMessage ;
  84.      WORD         wParam ;
  85.      LONG         lParam ;
  86.      {
  87.      static char  szPrm []    = "wParam       LOWORD(lParam)  HIWORD(lParam)",
  88.                   szTop []    = "Control ID   Window Handle   Notification",
  89.                   szUnd []    = "__________   _____________   ____________", 
  90.                   szFormat [] = " %5u           %4X          %5u",
  91.                   szBuffer [50] ;
  92.      static HWND  hWndButton [NUM] ;
  93.      static RECT  rect ;
  94.      static short xChar, yChar ;
  95.      HDC          hDC ;
  96.      PAINTSTRUCT  ps ;
  97.      short        i ;
  98.      TEXTMETRIC   tm ;
  99.  
  100.      switch (iMessage)
  101.           {
  102.           case WM_CREATE:
  103.                hDC = GetDC (hWnd) ;
  104.                GetTextMetrics (hDC, &tm) ;
  105.                xChar = tm.tmAveCharWidth ;
  106.                yChar = tm.tmHeight + tm.tmExternalLeading ;
  107.                ReleaseDC (hWnd, hDC) ;
  108.  
  109.                for (i = 0 ; i < NUM ; i++)
  110.                     hWndButton [i] = CreateWindow ("button", button[i].text,
  111.                               WS_CHILD | WS_VISIBLE | button[i].style,
  112. #ifdef MEWEL
  113.                               xChar, yChar * (1 + 2 * i),
  114.                               16 * xChar, 1 * yChar,
  115. #else
  116.                               xChar, yChar * (1 + 2 * i),
  117.                               16 * xChar, 2 * yChar,
  118. #endif
  119.                               hWnd, i,
  120.                               ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
  121.                break ;
  122.  
  123.           case WM_SIZE:
  124.                rect.left   = 20 * xChar ;
  125.                rect.top    = 3 * yChar ;
  126.                rect.right  = LOWORD (lParam) ;
  127.                rect.bottom = HIWORD (lParam) ;
  128.                break ;
  129.  
  130.           case WM_PAINT:
  131.                InvalidateRect (hWnd, &rect, TRUE) ;
  132.                hDC = BeginPaint (hWnd, &ps) ;
  133.                SetBkMode (hDC, TRANSPARENT) ;
  134.                TextOut (hDC, 20 * xChar, 1 * yChar, szPrm, sizeof szPrm - 1) ;
  135.                TextOut (hDC, 20 * xChar, 2 * yChar, szTop, sizeof szTop - 1) ;
  136.                TextOut (hDC, 20 * xChar, 2 * yChar, szUnd, sizeof szUnd - 1) ;
  137.                EndPaint (hWnd, &ps) ;
  138.                break ;
  139.  
  140.           case WM_COMMAND:
  141.                ScrollWindow (hWnd, 0, -yChar, &rect, &rect) ;
  142.                hDC = GetDC (hWnd) ;
  143.  
  144.                TextOut (hDC, 20 * xChar, yChar * (rect.bottom / yChar - 1),
  145.                          szBuffer, sprintf (szBuffer, szFormat, wParam,
  146.                               LOWORD (lParam), HIWORD (lParam))) ;
  147.  
  148.                ReleaseDC (hWnd, hDC) ;
  149.                ValidateRect (hWnd, NULL) ;
  150.                break ;
  151.  
  152.           case WM_DESTROY:
  153.                PostQuitMessage (0) ;
  154.                break ;
  155.  
  156.           default:
  157.                return DefWindowProc (hWnd, iMessage, wParam, lParam) ;
  158.           }
  159.      return 0L ;
  160.      }
  161.  
  162. #ifdef MEWEL
  163. MEWELmain(0)
  164. #endif
  165.